Scala入门(二):流程控制

最近在做一个spark项目,顺便分享一下我的Scala入门过程。这一系列文章假定读者有一定的java或者其他面向对象编程语言基础。本文主要介绍Scala的流程控制和异常处理。

先上一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
object TestScala2 {  
def main(args: Array[String]): Unit = {
//test 'for'
for (i <- 1 to 10) println(i)
//test 'dowhile'
var line = ""
do {
line = StdIn.readLine()
println(line)
} while (line != "")
//test 'if else'
val a = (Math.random() * 10).toInt;
val result = if (a % 2 == 0) "even:" + a else "odd:" + a
println(result)
//test 'try catch finally'
try {
//....
throw new Exception("--exception message--")
} catch {
case e: Exception => println("the exception is " + e.getMessage)
} finally {
println("finally")
}
}
}

我们先看第一行for循环的代码,它是做一个从1到10的循环,将遍历的每一个结果赋值给i,再将i打印出来。“<-”是赋值符号,在Scala中非常常见。“1 to 10”表示1到10的循环,也可以写成“1.to(10)”,由于在Scala中一切皆对象,1是一个int类型的对象,它有to这个方法,并且接收另一个int对象作为参数。

在第二个例子中,将键盘的输入赋值给line并打印,如果line为空则跳出,否则继续循环接收输入。StdIn.readLine()表示接收键盘输入,StdIn这个类通过“import scala.io.StdIn”引入。while循环和dowhile循环类似。

第三个例子,判断一个随机数是奇数还是偶数,通过if else语句块实现,语法和Java类似,但有一点,Scala可以直接接收if else语句块的返回值。另外Math是java.lang这个包里的函数,Scala由于运行在jvm上,因此它可以直接调用Java。

最后一个例子是异常的处理。这里插一句,try catch finally语句块从语法上来说可以作为流程控制的手段,但从语义上来说,建议仅作为异常处理来使用,而不要用来控制流程的跳转,当然这是题外话了。我们看到在catch中,使用case来匹配捕获的异常,可以写若干个case,只要有一个能匹配上,即终止,不像Java中只要没有break就会继续匹配。